iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0
自我挑戰組

打掉重練!Django的還債之旅~系列 第 12

Day12. 超級使用者 Super User

  • 分享至 

  • xImage
  •  

前言

什麼是超級使用者 Super User呢?django預設有一整套完整的資料庫管理介面,也就是我們在一開始startproject預設中的urls.py裡面的urlpatterns裡面的那個admin,沒錯!Super User就是admin,今天就來看看Super User怎麼被建立出來的?還有admin裡面究竟又有些什麼呢?

正題

django要怎麼建立Super User呢?只要輸入python manage.py createsuperuser在依照指示輸入django就會幫你把Super User建立起來,這邊要注意!再輸入python manage.py createsuperuser之前要記得先幫django的預設資料表migrate進DB,python manage.py migrate!!不然Super User的資料會沒地方存,而django自己也會抱錯並提示!
create完後,我們再把server run起來,python manage.py runserver,進去後在url後面加上/admin就能看到admin的登入頁面囉~此時在輸入我們剛剛create的帳號密碼,就可以登入了
https://ithelp.ithome.com.tw/upload/images/20230927/20162905a4mKt6R7jc.png
登入後會看到
https://ithelp.ithome.com.tw/upload/images/20230927/20162905MDLZIQnzfC.png
在這邊就可以簡單的對django的table進行圖形介面的CRUD,如果是自己寫在models.py的table的話,就必須要註冊進去admin.py裡面django才能順利的去讀取到!寫起來像這樣,假設我有兩個models,分別為PersonTodo,把他註冊進去

from django.contrib import admin
from .models import *
# Register your models here.

admin.site.register(Person)
admin.site.register(Todo)

就可以很順利的在admin頁面中看到這兩個table的資訊囉~
https://ithelp.ithome.com.tw/upload/images/20230927/20162905lHnZ9SHV5d.png

那麼接下來,我們就來看看python manage.py createsuperuser做了什麼吧!不出意料的話應該就是簡單的把我們輸入的資料寫進特定的table而已~
這次位置變了,換去django.contrib.auth.management.commands.createsuperuser.py,那我們一樣看到handle()
先處理username
https://ithelp.ithome.com.tw/upload/images/20230927/20162905lNMGzP7kmc.png
再來是相關資訊
https://ithelp.ithome.com.tw/upload/images/20230927/201629053uKRx1eMp5.png
接著處理password
https://ithelp.ithome.com.tw/upload/images/20230927/20162905IIMpDiJjVR.png
密碼這邊有使用python內建函式庫getpass會讓你在CLI看不到你打的字
最後前面的步驟都沒問題的話就會寫進資料庫!
https://ithelp.ithome.com.tw/upload/images/20230927/20162905cL7dDJ4lKP.png
步驟大概是上面那樣,和我們實際操作create super user的時候差不多,但裡面有些變數都不太清楚在哪邊,來找找看吧!
首先就來看看self.UserModel這個變數吧,熟悉django的夥伴一看名稱大概就可以猜測出他是ORM的model了!只不過具體的位置在哪邊呢?
https://ithelp.ithome.com.tw/upload/images/20230927/20162905OoPLHKiGsp.png
再往裡看
https://ithelp.ithome.com.tw/upload/images/20230927/20162905LskIZknKIU.png
這邊就可以看到他是根據settings中的變數AUTH_USER_MODEL來去定位的,那反推我們如果需要客製化或許就需要去修改到這個變數~
再往裡面挖,就可以在這邊找到了django.conf.global_settings.py這邊有一些django相關的settings預設變數
https://ithelp.ithome.com.tw/upload/images/20230927/201629050vNlIXqDlb.png
那我們在根據這個的位置來去找!
最後終於找到我們的model位置django.contrib.auth.models.User
https://ithelp.ithome.com.tw/upload/images/20230927/20162905UWoq2DD1p0.png
讓我們看重要的他是如何create的!
https://ithelp.ithome.com.tw/upload/images/20230927/20162905GB1cLwLRVi.png
我目前沒看到他是怎麼定義_default_manager的部分,不過可以知道他是UserManager
然後就可以在UserManager那邊找到create_superuser部分啦!
https://ithelp.ithome.com.tw/upload/images/20230927/20162905Ea5bMKnWvA.png
https://ithelp.ithome.com.tw/upload/images/20230927/20162905AyNxGLJlyQ.png
至於ORM的部分我們之後再找一天來看看吧!!

結語

沒想到django的model也可以有這樣的寫法,之前都只有用最普通的寫法,一個model一個table那樣~真的看著source code都會有不同的驚喜在等著我們!!
/images/emoticon/emoticon12.gif


上一篇
Day11. 我們常寫的view,在這裡!
下一篇
Day13. migrate 資料庫遷移?
系列文
打掉重練!Django的還債之旅~30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言